package com.uacp.sgb.datos.dominio.persistencia.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import com.uacp.sgb.datos.dominio.entidades.Dependencia;
import com.uacp.sgb.datos.dominio.persistencia.util.UtilManager;

public class DependenciaDao 
{
	public static void guardar(Dependencia dependencia)
	{
		EntityManager em = UtilManager.getEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.persist(dependencia);
		tx.commit();
		em.close();
	}
	
	public static List<Dependencia> listarAreas(Dependencia dependencia)
	{
		List<Dependencia> dependencias;
		
		EntityManager em = UtilManager.getEntityManager();
		
		Query query = em.createNamedQuery("Dependencia.listarAreas");
		
		query.setParameter("nombre", dependencia.getNombre());
		
		dependencias = query.getResultList();

		em.close();
		
		return dependencias;
		
	}
	
	public static List<Dependencia> listar()
	{
		List<Dependencia> dependencias;
		
		EntityManager em = UtilManager.getEntityManager();
		
		Query query = em.createNamedQuery("Dependencia.listar");
		
		dependencias = query.getResultList();

		em.close();
		
		return dependencias;
	}
	
	public static void sincronizar(Dependencia dependencia)
	{
		EntityManager em = UtilManager.getEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		em.merge(dependencia);
		tx.commit();
		em.close();
	}
	
	public static Dependencia buscar(Long id) 
	{
		if( id == null )
			return null;
		
		EntityManager em = UtilManager.getEntityManager();
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		Dependencia dependencia = em.find(Dependencia.class, id);
		tx.commit();
		em.close();
		
		return dependencia;
	}
	
	public static Dependencia buscarPorNombre(String nombreDependencia) 
	{
		if(nombreDependencia == null)
			throw new RuntimeException("Nombre de dependencia nulo");
		
		Dependencia dependencia = null;
		
		EntityManager em = UtilManager.getEntityManager();
		
		Query query = em.createNamedQuery("Dependencia.buscarPorNombre");
		query.setParameter("nombre", nombreDependencia);
		
		try
		{
			dependencia = (Dependencia)query.getSingleResult();
		}
		catch(NoResultException nre)
		{
			em.close();
			return null;
		}
		
		em.close();
		
		return dependencia;
	}
}
